#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QJsonArray>
#include<QJsonDocument>//Json文档
#include<QFile>//文件读写
#include<QMessageBox>
#include<QJsonObject>//JSON对象
#include<QJsonParseError>//Json异常捕捉

#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}

//将数据信息-->写入JSON文件
void MainWindow::on_pushButtonWriteJson_clicked()
{
    //创建JSON对象
    QJsonObject mysqinfo;

    mysqinfo.insert("ip","192.168.0.125");
    mysqinfo.insert("password","123456");
    mysqinfo.insert("user","root");
    mysqinfo.insert("port",3308);

    QJsonObject jsonifo;
    jsonifo.insert("code",1);
    jsonifo.insert("dbmsg","MySQL数据库配置参数");
    jsonifo.insert("data",mysqinfo);

    //创建JSON文档
    QJsonDocument jsondoc;
    jsondoc.setObject(jsonifo);

    //创建文件
    QFile qfiles("./databasejsonfiles.json");
    if(qfiles.open(QIODevice::WriteOnly))
    {
        qfiles.write(jsondoc.toJson());
        qfiles.close();
        qDebug()<<"恭喜你，json文件按写入成功！";



    }
    QMessageBox::information(this,"写入成功","恭喜你，json数据文件写入成功");
}

//读JSON文件
void MainWindow::on_pushButtonReadJson_clicked()
{
    QString strjson;

    QFile qfiles("./databasejsonfiles.json");
    if(qfiles.open(QIODevice::ReadOnly))
    {
        strjson=qfiles.readAll().data();
        qfiles.close();

    }

    QJsonParseError jsonerror;//返回JSON解析错误的时候，报告错误信息
    QJsonDocument jsondoc=QJsonDocument::fromJson(strjson.toUtf8(),&jsonerror);

    QStringList str;//用来拼接字符串
    if(jsondoc.isObject())
    {
        QJsonObject obj=jsondoc.object();
        QStringList keys=obj.keys();

        for(int i=0;i<keys.size();i++)
        {
           QString key=keys.at(i);
           QJsonValue value=obj.value(key);
           if(value.isDouble())
           {
               qDebug()<<key<<":"<<value.toDouble();

           }
           if(value.isString())
           {
               qDebug()<<key<<":"<<value.toString();

           }
           if(value.isObject())
           {
               qDebug()<<key;
               //直接处理内部键值对，不在进行类型判断的提示
               QJsonObject subObj=value.toObject();
               QStringList ls=subObj.keys();

               foreach(QString key1,ls)
               {
                   if(subObj.value(key1).isDouble())
                   {
                    qDebug()<<key1<<":"<<subObj.value(key1).toDouble();
                    QString s=s.number(subObj.value(key1).toDouble());
                    str<<s;
                   }
                   else{
                       qDebug()<<key1<<":"<<subObj.value(key1).toString();
                       QString ss=subObj.value(key1).toString();
                       str<<ss;
                   }
               }


           }
        }

    }

    QString totalstr;

    QStringList str2;
    str2<<"数据库IP地址:"<<"数据库端口:"<<"数据库用户:"<<"数据库密码:";
    for(int i=0;i<str.size();i++)
    {
        totalstr+=str2[i]+str[i]+QString("\n");

    }
   QMessageBox::information(this,"成功",totalstr,QMessageBox::Yes);


}
